<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>构造函数</title>
</head>
<body>
<script>

    /*
    * 这里的构造函数其实和class中的constructor一样的
    * */
    function User(name) {
        /*
        * this ={}   =>  this = new Object()
        * this.name =name
        * return this
        * */

        //当在构造函数中运行这一行代码的时候本质上是在运行上面的那几行代码 所以说一切对象都是Object
        this.name = name

        /*这是在对象自身上定义方法  对象会首先在自身寻找方法*/
        this.setName = function (name) {
            this.name = name
        }
    }

    /*这是在对象原型上定义方法  自身没有方法的话才会去原型上寻找*/
    User.prototype.getName = function () {
        return this.name
    }


    /*
    * class创建对象与使用new 构造函数那样创建对象的不同就在于 使用构造函数会有一直割裂感 在对象身上定义属性
    * 然后在构造函数外部——在构造函数的原型上定义方法
      而在class中定义属性和在原型上定义方法的操作都是在class内部进行的
    * */
    class Animal {
        constructor(name) {
            this.name = name
        }

        getName() {
            return this.name
        }
    }


</script>
</body>
</html>